\section{Keras: 基于 Python的深度学习库}\label{keras-ux57faux4e8e-python-ux7684ux6df1ux5ea6ux5b66ux4e60ux5e93}

\subsection{你恰好发现了Keras}\label{ux4f60ux6070ux597dux53d1ux73b0ux4e86-keras}

Keras 是一个用 Python 编写的高级神经网络 API，它能够以
\href{https://github.com/tensorflow/tensorflow}{TensorFlow},
\href{https://github.com/Microsoft/cntk}{CNTK}, 或者
\href{https://github.com/Theano/Theano}{Theano} 作为后端运行。Keras
的开发重点是支持快速的实验。\emph{能够以最小的时延把你的想法转换为实验结果，是做好研究的关键。}

如果你在以下情况下需要深度学习库，请使用 Keras：

\begin{itemize}
\tightlist
\item
  允许简单而快速的原型设计（由于用户友好，高度模块化，可扩展性）。
\item
  同时支持卷积神经网络和循环神经网络，以及两者的组合。
\item
  在 CPU 和 GPU 上无缝运行。
\end{itemize}

查看文档，请访问 \href{https://keras.io/zh/}{Keras.io}。

Keras 兼容的 Python 版本: \textbf{Python 2.7-3.6}。


\subsection{指导原则}\label{ux6307ux5bfcux539fux5219}

\begin{itemize}
\item
  \textbf{用户友好。} Keras 是为人类而不是为机器设计的
  API。它把用户体验放在首要和中心位置。Keras
  遵循减少认知困难的最佳实践：它提供一致且简单的
  API，将常见用例所需的用户操作数量降至最低，并且在用户错误时提供清晰和可操作的反馈。
\item
  \textbf{模块化。}
  模型被理解为由独立的、完全可配置的模块构成的序列或图。这些模块可以以尽可能少的限制组装在一起。特别是神经网络层、损失函数、优化器、初始化方法、激活函数、正则化方法，它们都是可以结合起来构建新模型的模块。
\item
  \textbf{易扩展性。}
  新的模块是很容易添加的（作为新的类和函数），现有的模块已经提供了充足的示例。由于能够轻松地创建可以提高表现力的新模块，Keras
  更加适合高级研究。
\item
  \textbf{基于 Python 实现。} Keras
  没有特定格式的单独配置文件。模型定义在 Python
  代码中，这些代码紧凑，易于调试，并且易于扩展。
\end{itemize}



\subsection{快速开始：30 秒上手
Keras}\label{ux5febux901fux5f00ux59cb30-ux79d2ux4e0aux624b-keras}

Keras 的核心数据结构是
\textbf{model}，一种组织网络层的方式。最简单的模型是
\hyperref[sequential-model-guide]{\texttt{Sequential}}
顺序模型，它是由多个网络层线性堆叠的栈。对于更复杂的结构，你应该使用
\hyperref[functional-api-guide]{Keras函数式 API}，它允许构建任意的神经网络图。

\texttt{Sequential} 顺序模型如下所示：

\begin{Shaded}
\begin{Highlighting}[]
\ImportTok{from} \NormalTok{keras.models }\ImportTok{import} \NormalTok{Sequential}

\NormalTok{model }\OperatorTok{=} \NormalTok{Sequential()}
\end{Highlighting}
\end{Shaded}

可以简单地使用 \texttt{.add()} 来堆叠模型：

\begin{Shaded}
\begin{Highlighting}[]
\ImportTok{from} \NormalTok{keras.layers }\ImportTok{import} \NormalTok{Dense}

\NormalTok{model.add(Dense(units}\OperatorTok{=}\DecValTok{64}\NormalTok{, activation}\OperatorTok{=}\StringTok{'relu'}\NormalTok{, input_dim}\OperatorTok{=}\DecValTok{100}\NormalTok{))}
\NormalTok{model.add(Dense(units}\OperatorTok{=}\DecValTok{10}\NormalTok{, activation}\OperatorTok{=}\StringTok{'softmax'}\NormalTok{))}
\end{Highlighting}
\end{Shaded}

在完成了模型的构建后, 可以使用 \texttt{.compile()} 来配置学习过程：

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{model.}\BuiltInTok{compile}\NormalTok{(loss}\OperatorTok{=}\StringTok{'categorical_crossentropy'}\NormalTok{,}
              \NormalTok{optimizer}\OperatorTok{=}\StringTok{'sgd'}\NormalTok{,}
              \NormalTok{metrics}\OperatorTok{=}\NormalTok{[}\StringTok{'accuracy'}\NormalTok{])}
\end{Highlighting}
\end{Shaded}

如果需要，你还可以进一步地配置你的优化器。Keras
的核心原则是使事情变得相当简单，同时又允许用户在需要的时候能够进行完全的控制（终极的控制是源代码的易扩展性）。

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{model.}\BuiltInTok{compile}\NormalTok{(loss}\OperatorTok{=}\NormalTok{keras.losses.categorical_crossentropy,}
              \NormalTok{optimizer}\OperatorTok{=}\NormalTok{keras.optimizers.SGD(lr}\OperatorTok{=}\FloatTok{0.01}\NormalTok{, momentum}\OperatorTok{=}\FloatTok{0.9}\NormalTok{, nesterov}\OperatorTok{=}\VariableTok{True}\NormalTok{))}
\end{Highlighting}
\end{Shaded}

现在，你可以批量地在训练数据上进行迭代了：

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# x_train 和 y_train 是 Numpy 数组 -- 就像在 Scikit-Learn API 中一样。}
\NormalTok{model.fit(x_train, y_train, epochs}\OperatorTok{=}\DecValTok{5}\NormalTok{, batch_size}\OperatorTok{=}\DecValTok{32}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

或者，你可以手动地将批次的数据提供给模型：

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{model.train_on_batch(x_batch, y_batch)}
\end{Highlighting}
\end{Shaded}

只需一行代码就能评估模型性能：

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{loss_and_metrics }\OperatorTok{=} \NormalTok{model.evaluate(x_test, y_test, batch_size}\OperatorTok{=}\DecValTok{128}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

或者对新的数据生成预测：

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{classes }\OperatorTok{=} \NormalTok{model.predict(x_test, batch_size}\OperatorTok{=}\DecValTok{128}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

构建一个问答系统，一个图像分类模型，一个神经图灵机，或者其他的任何模型，就是这么的快。深度学习背后的思想很简单，那么它们的实现又何必要那么痛苦呢？

有关 Keras 更深入的教程，请查看：



\begin{itemize}
\tightlist
\item
\hyperref[sequential-model-guide]{\texttt{开始使用 Sequential 顺序模型}}
\item
\hyperref[functional-api-guide]{开始使用函数式 API}
\end{itemize}

在代码仓库的
\href{https://github.com/keras-team/keras/tree/master/examples}{examples
目录}中，你会找到更多高级模型：基于记忆网络的问答系统、基于栈式 LSTM
的文本生成等等。



\subsection{安装指引}\label{ux5b89ux88c5ux6307ux5f15}

在安装 Keras 之前，请安装以下后端引擎之一：TensorFlow，Theano，或者
CNTK。我们推荐 TensorFlow 后端。

\begin{itemize}
\tightlist
\item
  \href{https://www.tensorflow.org/install/}{TensorFlow 安装指引}。
\item
  \href{http://deeplearning.net/software/theano/install.html\#install}{Theano
  安装指引}。
\item
  \href{https://docs.microsoft.com/en-us/cognitive-toolkit/setup-cntk-on-your-machine}{CNTK
  安装指引}。
\end{itemize}

你也可以考虑安装以下\textbf{可选依赖}：

\begin{itemize}
\tightlist
\item
  cuDNN (如果你计划在 GPU 上运行 Keras，建议安装)。
\item
  HDF5 和 h5py (如果你需要将 Keras 模型保存到磁盘，则需要这些)。
\item
  graphviz 和 pydot
  (用于\hyperref[visualization]{可视化工具}绘制模型图)。
\end{itemize}

然后你就可以安装 Keras 本身了。有两种方法安装 Keras：

\begin{itemize}
\tightlist
\item
  \textbf{使用 PyPI 安装 Keras (推荐)：}
\end{itemize}

\begin{verbatim}
sudo pip install keras
\end{verbatim}

如果你使用 virtualenv 虚拟环境, 你可以避免使用 sudo：

\begin{verbatim}
pip install keras
\end{verbatim}

\begin{itemize}
\tightlist
\item
  \textbf{或者：使用 Github 源码安装 Keras：}
\end{itemize}

首先，使用 \texttt{git} 来克隆 Keras：

\begin{verbatim}
git clone https://github.com/keras-team/keras.git
\end{verbatim}

然后，\texttt{cd} 到 Keras 目录并且运行安装命令：

\begin{verbatim}
cd keras
sudo python setup.py install
\end{verbatim}



\subsection{使用 TensorFlow
以外的后端}

默认情况下，Keras 将使用 TensorFlow
作为其张量操作库。请\hyperref[keras-backend]{跟随这些指引}来配置其他
Keras 后端。



\subsection{技术支持}

你可以提出问题并参与开发讨论：

\begin{itemize}
\tightlist
\item
  \href{https://groups.google.com/forum/\#!forum/keras-users}{Keras
  Google group}。
\item
  \href{https://kerasteam.slack.com}{Keras Slack channel}。 使用
  \href{https://keras-slack-autojoin.herokuapp.com/}{这个链接}
  向该频道请求邀请函。
\end{itemize}

你也可以在 \href{https://github.com/keras-team/keras/issues}{Github
issues} 中张贴\textbf{漏洞报告和新功能请求}（仅限于此）。注意请先阅读\hyperref[contributing]{规范文档}。



\subsection{为什么取名为
Keras?}\label{ux4e3aux4ec0ux4e48ux53d6ux540dux4e3a-keras}

Keras (\setmainfont{Linux Libertine O} κέρας) 在希腊语中意为 \emph{号角}
。它来自古希腊和拉丁文学中的一个文学形象，首先出现于 \emph{《奥德赛》}
中， 梦神 (\emph{Oneiroi}, singular \emph{Oneiros})
从这两类人中分离出来：那些用虚幻的景象欺骗人类，通过象牙之门抵达地球之人，以及那些宣告未来即将到来，通过号角之门抵达之人。
它类似于文字寓意，{\setmainfont{Linux Libertine O}κέρας }(号角) / \setmainfont{Linux Libertine O}κραίνω (履行)，以及 \setmainfont{Linux Libertine O}ἐλέφας (象牙) /
\setmainfont{Linux Libertine O}ἐλεφαίρομαι (欺骗)。

Keras 最初是作为 ONEIROS
项目（开放式神经电子智能机器人操作系统）研究工作的一部分而开发的。

\begin{quote}
\emph{``Oneiroi 超出了我们的理解 -
谁能确定它们讲述了什么故事？并不是所有人都能找到。那里有两扇门，就是通往短暂的
Oneiroi 的通道；一个是用号角制造的，一个是用象牙制造的。穿过尖锐的象牙的
Oneiroi 是诡计多端的，他们带有一些不会实现的信息；
那些穿过抛光的喇叭出来的人背后具有真理，对于看到他们的人来说是完成的。"}
Homer, Odyssey 19. 562 ff (Shewring translation).
\end{quote}

\newpage